#ifndef OPERATIONS_DATA_STATISTICS_H
#define OPERATIONS_DATA_STATISTICS_H

#include <QWidget>
#include <QTimer>
#include <QDateTime>
#include <QMap>
#include "api.h"

namespace Ui {
class operations_data_statistics;
}

class operations_data_statistics : public QWidget
{
    Q_OBJECT

public:
    explicit operations_data_statistics(QWidget *parent = nullptr);
    ~operations_data_statistics();

private slots:
    void onRefreshBtnClicked();
    void onExportBtnClicked();
    void onTimeRangeChanged(int index);
    void onAutoRefresh();
    void onDetailsTableCellClicked(int row, int column);
    void onDetailsTableCellDoubleClicked(int row, int column);

private:
    // 数据加载和统计
    void loadStatisticsData();
    void updateStatisticsCards();
    void updateRevenueChart();
    void updateCategoryChart();
    void updateDetailsTable();
    void updateStatusInfo();
    
    // 统计显示更新
    void updateStatisticsDisplay(const QJsonObject &data);
    void updateCharts(const QJsonObject &data);
    void updateTables(const QJsonObject &data);
    void updateRevenueChart(const QJsonArray &revenueData);
    void updateCategoryChart(const QJsonArray &categoryData);

    // 趋势计算
    double calculateTrend(double current, double previous);
    QString getTrendIcon(double trend);
    QString getTrendStyle(double trend);
    QString getTrendStyleClass(double trend);
    
    // 时间范围处理
    QString getPreviousTimeRange(const QString &timeRange);
    QString formatCurrency(double amount);
    QString formatNumber(int number);

    // 导出功能
    void exportToCSV();
    void exportToPDF();
    bool exportStatisticsReport(const QString &filePath);

    // 图表相关（预留接口）
    void setupRevenueChart();
    void setupCategoryChart();
    void updateChartData();

    // UI初始化和更新
    void initializeUI();
    void setupConnections();
    void refreshAllData();
    void showLoadingState(bool loading);
    void showStatusMessage(const QString &message, const QString &type = "info");

    // 数据验证和错误处理
    bool validateData();
    void handleApiError(const QString &error);
    void logOperation(const QString &operation);

private:
    Ui::operations_data_statistics *ui;
    Api* m_api;
    QTimer *m_refreshTimer;
    
    // 统计数据缓存
    struct StatisticsData {
        double totalRevenue;
        int totalOrders;
        int activeUsers;
        int totalTickets;
        double revenueTrend;
        double ordersTrend;
        double usersTrend;
        double ticketsTrend;
        QDateTime lastUpdateTime;
    } m_currentStats;
    
    // 配置参数
    static const int REFRESH_INTERVAL = 60000; // 60秒自动刷新
    static const int MAX_RETRY_ATTEMPTS = 3;
    
    bool m_isLoading;
    QString m_currentTimeRange;
    int m_retryCount;
};

#endif // OPERATIONS_DATA_STATISTICS_H
